Analysis date: 2022-08-08

Setup

Load libraries

library(plyr)
library(gtools)
library(pheatmap)
library(Matrix)
library(Hmisc)
library(ggpubr)
library(readxl)
library(DESeq2)
library(tidyverse)
library(limma)
library(apeglm)
library(biomartr)
library(biomaRt)
library(MultiAssayExperiment)
library(gplots)
library(grid)
library(cowplot)

Load data

load("data/multiomics_MAE.RData")
source("data/Figure_layouts.R")
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
## `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
KEGG <- read.table("data/c2.cp.kegg.v7.0.symbols.gmt", sep = "/")
KEGG <- KEGG %>% as_tibble() %>% mutate(pathway = gsub("\thttp:", "", V1),
                                        genes=V7)
BCAA_genes <- KEGG %>% filter(pathway == "KEGG_VALINE_LEUCINE_AND_ISOLEUCINE_DEGRADATION") %>% dplyr::select(genes) %>% unlist() %>% strsplit2("\t") %>% .[,-1]
proteasome_genes <- KEGG %>% filter(pathway == "KEGG_PROTEASOME") %>% dplyr::select(genes) %>% unlist() %>% strsplit2("\t") %>% .[,-1]
splice_genes <- KEGG %>% filter(pathway == "KEGG_SPLICEOSOME") %>% dplyr::select(genes) %>% unlist() %>% strsplit2("\t") %>% .[,-1]
BCR_genes <- KEGG %>% filter(pathway == "KEGG_B_CELL_RECEPTOR_SIGNALING_PATHWAY") %>% dplyr::select(genes) %>% unlist() %>% strsplit2("\t") %>% .[,-1]

Functions

Rename deletions and gains functions

change_chr_abber_brackets <- function(levels_alt){
levels_alt %>% 
  str_replace(., "del", "del(") %>% str_replace(., "gain", "gain(") %>%
  str_replace(., "q", ")(q") %>% str_replace(., "p", ")(p") %>% 
  str_replace(., "\\)\\(prim", "prim") %>% 
  str_replace(., "11\\)\\(q", "11)(q22.3)") %>% 
  str_replace(., "p13", "p13)") %>% str_replace(., "q14", "q14)") %>%
  str_replace(., "q24", "q24)")
}

Format data

Proteomics

prot_few_nas <- multiomics_MAE[["proteomics"]] %>% is.na() %>% rowSums()
prot_few_nas <- prot_few_nas[ prot_few_nas == 0 ] %>% names()

Biomart

Get annotation from biomart
#ensembl=useMart("ensembl")
#ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl)
#genemap <- getBM(attributes = c("ensembl_gene_id", "hgnc_symbol", "start_position", "end_position" , "chromosome_name", "description"), 
#    filters = "hgnc_symbol", values = (prot_few_nas %>% unique), mart = ensembl)
#genemap <- genemap %>% as_tibble() %>% mutate(mean_position=(start_position + end_position)/2)
load("/Volumes/sd17b003/Sophie/Analysis/CLL_Proteomics/R_objects/ensembl_proteins_location.RData")
Add gene location to MAE
metadata(multiomics_MAE)$gene_symbol_mapping <- left_join(metadata(multiomics_MAE)$gene_symbol_mapping, genemap)
Create proteomics_tbl_meta_biomart tbl
proteomics_tbl_meta_biomart_chrab <- wideFormat(multiomics_MAE[,,"chrom_abber"]) %>% as_tibble()
## Warning: 'experiments' dropped; see 'metadata'
## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types
proteomics_tbl_meta_biomart_chrab <- mutate_if(proteomics_tbl_meta_biomart_chrab, is.numeric, as.logical)
proteomics_tbl_meta_biomart_chrab <- proteomics_tbl_meta_biomart_chrab %>%  dplyr::select(primary, 
                colnames(proteomics_tbl_meta_biomart_chrab[, -1])[
                  apply(proteomics_tbl_meta_biomart_chrab[, -1] ,2, function(cl){ all(table(cl)>2) } )
                  ] )
proteomics_tbl_meta_biomart_chrab <- proteomics_tbl_meta_biomart_chrab %>%  dplyr::select(primary, 
                colnames(proteomics_tbl_meta_biomart_chrab[, -1])[
                  apply(proteomics_tbl_meta_biomart_chrab[, -1] ,2, function(cl){ length(table(cl))>1 } )
                  ] )

proteomics_tbl_meta_biomart_SNP <- wideFormat(multiomics_MAE[,,"SNPs"]) %>% as_tibble()
## Warning: 'experiments' dropped; see 'metadata'
proteomics_tbl_meta_biomart_SNP <- mutate_if(proteomics_tbl_meta_biomart_SNP, is.numeric, as.logical)
proteomics_tbl_meta_biomart_SNP <- proteomics_tbl_meta_biomart_SNP %>%  dplyr::select(primary, 
                colnames(proteomics_tbl_meta_biomart_SNP[, -1])[
                  apply(proteomics_tbl_meta_biomart_SNP[, -1] ,2, function(cl){ all(table(cl)>2) } )
                  ] )
proteomics_tbl_meta_biomart_SNP <- proteomics_tbl_meta_biomart_SNP %>%  dplyr::select(primary, 
                colnames(proteomics_tbl_meta_biomart_SNP[, -1])[
                  apply(proteomics_tbl_meta_biomart_SNP[, -1] ,2, function(cl){ length(table(cl))>1 } )
                  ] )

proteomics_tbl_meta_biomart_health <- wideFormat(multiomics_MAE[,,"health_record_bin"]) %>% as_tibble() %>% dplyr::select(primary, health_record_bin_IGHV_mutated, health_record_bin_elderly_at_diagnosis, health_record_bin_treated)
## Warning: 'experiments' dropped; see 'metadata'
proteomics_tbl_meta_biomart_health <- mutate_if(proteomics_tbl_meta_biomart_health, is.numeric, as.logical)

proteomics_tbl_meta_biomart <- left_join(
  left_join((
    longFormat(multiomics_MAE[,,"proteomics"], colDataCols = c("trisomy12", "IGHV_mutated") ) %>% 
               as_tibble() %>%
               #mutate(IGHV= if_else(IGHV %in% c("M", "U"), IGHV, "NA") )
               mutate(IGHV=IGHV_mutated)
             ), 
                                         metadata(multiomics_MAE)$gene_symbol_mapping[c(2,3,5:7)], 
                                         by=c("rowname"="hgnc_symbol")),
  proteomics_tbl_meta_biomart_chrab, by=c("primary"))
## Warning: 'experiments' dropped; see 'metadata'
proteomics_tbl_meta_biomart <- left_join( left_join(proteomics_tbl_meta_biomart,
          proteomics_tbl_meta_biomart_SNP, by=c("primary")),
          proteomics_tbl_meta_biomart_health, by=c("primary"))
Create Drug and Proteomics objects
drug_and_proteomics_prot <- longFormat(multiomics_MAE[,,c("proteomics")]) %>% as_tibble()
## Warning: 'experiments' dropped; see 'metadata'
drug_and_proteomics_drug <- longFormat(multiomics_MAE[,,c("drug_resp_mono")]) %>% as_tibble()
## Warning: 'experiments' dropped; see 'metadata'
## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types
drug_and_proteomics_drug <- drug_and_proteomics_drug %>% separate(rowname, into = c("Drug", "conc"), sep = "_") %>% 
  group_by(assay, primary, rowname=Drug, colname ) %>%
  dplyr::summarise(value=mean(value, na.rm=TRUE)) %>% ungroup()
drug_and_proteomics <- bind_rows(drug_and_proteomics_prot, drug_and_proteomics_drug)

pats_drug_and_prot <- drug_and_proteomics %>% group_by(primary) %>% dplyr::summarise(nassay=length(unique(assay))) %>% dplyr::filter(nassay==2) %>% .$primary
drug_and_proteomics <- drug_and_proteomics %>% dplyr::filter(primary %in% pats_drug_and_prot)
all_prot <- drug_and_proteomics %>% dplyr::filter(assay=="proteomics", rowname %in% prot_few_nas) %>% .$rowname %>% unique()

all_drugs <- drug_and_proteomics %>% dplyr::filter(assay=="drug_resp_mono") %>% .$rowname %>% unique()

Overlapping patients proteomics and RNASeq

pat_overlap_prot_RNA <- colnames(intersectColumns(multiomics_MAE[,,c("proteomics", "RNAseq_norm")]))[["proteomics"]]
## Warning: 'experiments' dropped; see 'metadata'
## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types

## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types

This is what the object looks like

proteomics_tbl_meta_biomart
experiments(multiomics_MAE)
## ExperimentList class object of length 8:
##  [1] SNPs: matrix with 8 rows and 80 columns
##  [2] drug_resp_mono: data.frame with 130 rows and 81 columns
##  [3] chrom_abber: data.frame with 5 rows and 81 columns
##  [4] health_record_bin: matrix with 6 rows and 81 columns
##  [5] health_record_scaled: matrix with 6 rows and 81 columns
##  [6] proteomics: matrix with 7311 rows and 68 columns
##  [7] RNAseq_full: DESeqDataSet with 63214 rows and 59 columns
##  [8] RNAseq_norm: data.frame with 9273 rows and 59 columns
as_tibble(colData(multiomics_MAE))
multiomics_MAE
## A MultiAssayExperiment object of 8 listed
##  experiments with user-defined names and respective classes.
##  Containing an ExperimentList class object of length 8:
##  [1] SNPs: matrix with 8 rows and 80 columns
##  [2] drug_resp_mono: data.frame with 130 rows and 81 columns
##  [3] chrom_abber: data.frame with 5 rows and 81 columns
##  [4] health_record_bin: matrix with 6 rows and 81 columns
##  [5] health_record_scaled: matrix with 6 rows and 81 columns
##  [6] proteomics: matrix with 7311 rows and 68 columns
##  [7] RNAseq_full: DESeqDataSet with 63214 rows and 59 columns
##  [8] RNAseq_norm: data.frame with 9273 rows and 59 columns
## Functionality:
##  experiments() - obtain the ExperimentList instance
##  colData() - the primary/phenotype DataFrame
##  sampleMap() - the sample coordination DataFrame
##  `$`, `[`, `[[` - extract colData columns, subset, or experiment
##  *Format() - convert into a long or wide DataFrame
##  assays() - convert ExperimentList to a SimpleList of matrices
##  exportClass() - save data to flat files
assay(multiomics_MAE[prot_few_nas , ,"proteomics"])[1:5,1:5]
## Warning: 'experiments' dropped; see 'metadata'
## harmonizing input:
##   removing 522 sampleMap rows not in names(experiments)
##   removing 13 colData rownames not in sampleMap 'primary'
##             CLL_1        CLL_4       CLL_8      CLL_20      CLL_24
## A2M   -0.23106599 -0.123775317 -0.20324611 -0.11422224  0.05369119
## AAAS  -0.04446032 -0.003929938 -0.10881390  0.21728422 -0.24019198
## AACS   0.18091637 -0.469318906  0.01926965  0.46120353  0.27485862
## AAGAB  0.11577450  0.129642752  0.10785538 -0.06247763  0.25647801
## AAMDC  0.21443028 -0.003820597 -0.09936349  0.62120261 -0.26938714
dim(assay(multiomics_MAE[prot_few_nas , ,"proteomics"]))
## Warning: 'experiments' dropped; see 'metadata'
## harmonizing input:
##   removing 522 sampleMap rows not in names(experiments)
##   removing 13 colData rownames not in sampleMap 'primary'
## [1] 7311   68

Some numbers for the different datasets

print(paste( round( (!(assay(multiomics_MAE[,,"proteomics"]) %>% is.na() ) ) %>% colSums() %>% mean) , 
             "proteins per sample were detected on average in proteomics data"))
## Warning: 'experiments' dropped; see 'metadata'
## [1] "7311 proteins per sample were detected on average in proteomics data"
print(paste( round( (!(assay(multiomics_MAE[,,"RNAseq_full"]) %>% is.na() ) ) %>% 
                      colSums() %>% mean) , 
             "transcipts per sample were detected on average in RNASeq data"))
## Warning: 'experiments' dropped; see 'metadata'
## [1] "63214 transcipts per sample were detected on average in RNASeq data"
if(!any(is.na(assay(multiomics_MAE[,,"RNAseq_full"])))){
  print("No NAs in RNASeq dataset")
}
## Warning: 'experiments' dropped; see 'metadata'
## [1] "No NAs in RNASeq dataset"
print( paste( ( (assay(multiomics_MAE[,,"RNAseq_full"]) %>% rowMeans() ) > 0 ) %>% sum , "different transcripts were detected"))
## Warning: 'experiments' dropped; see 'metadata'
## [1] "40083 different transcripts were detected"
print(
  paste(
    multiomics_MAE@metadata$gene_symbol_mapping %>% 
  filter(ensembl_gene_id %in%
           names((assay(multiomics_MAE[,,"RNAseq_full"]) %>% rowMeans() ) > 0 ) ) %>%
  dplyr::select(hgnc_symbol) %>% unique %>%
  filter(hgnc_symbol != "") %>% 
  nrow, 
  "transcripts with unique hgnc symbols"))
## Warning: 'experiments' dropped; see 'metadata'
## [1] "35402 transcripts with unique hgnc symbols"
print( paste(
(multiomics_MAE@metadata$gene_symbol_mapping %>% 
  filter(ensembl_gene_id %in%
           names((assay(multiomics_MAE[,,"RNAseq_full"]) %>% rowMeans() ) > 0 ) ) %>%
  dplyr::select(hgnc_symbol) %>% unique %>%
  filter(hgnc_symbol != "") %>% .$hgnc_symbol %in%
rownames(multiomics_MAE@ExperimentList$proteomics) ) %>% sum,
"matching proteins and transcripts detected"))
## Warning: 'experiments' dropped; see 'metadata'
## [1] "7199 matching proteins and transcripts detected"
protpats <- multiomics_MAE@sampleMap %>% as_tibble() %>% filter(assay=="proteomics") %>% .$primary %>% unique
message("Available datasets for proteomics patients:")
multiomics_MAE[,protpats,]@sampleMap %>% .$assay %>% table
## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types
## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types

## Warning: 'ExperimentList' contains 'data.frame' or 'DataFrame',
##   potential for errors with mixed data types
## .
##                 SNPs       drug_resp_mono          chrom_abber 
##                   67                   68                   68 
##    health_record_bin health_record_scaled           proteomics 
##                   68                   68                   68 
##          RNAseq_full          RNAseq_norm 
##                   59                   59

Oncoplot

pat_with_prot <- sampleMap(multiomics_MAE) %>% as_tibble() %>% filter(assay == "proteomics") %>% .$primary
multiomics_MAE_prot <- multiomics_MAE[,pat_with_prot,]
order_oncoplot <- longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% 
  as_tibble() %>% 
  group_by(rowname) %>%
  dplyr::summarise(total=sum(value, na.rm = TRUE)) %>%
  arrange(total ) %>%
  .$rowname %>% change_chr_abber_brackets

tmp <- wideFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% as_tibble() 
colnames(tmp) <- colnames(tmp) %>% gsub("SNPs_|chrom_abber_", "",.) %>% 
  change_chr_abber_brackets
for(l in 1:length(order_oncoplot)){
  tmp <- tmp %>% arrange_( as.name(order_oncoplot[l] ) )
}

onco_center <- 
  longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% 
  as_tibble() %>% 
  mutate(alteration= if_else(value==1, assay, as.character(value))) %>%
  mutate(rowname = change_chr_abber_brackets(rowname) ) %>%
  ggplot(aes(primary, rowname, fill=alteration)) + 
  geom_tile(color="black") + 
  scale_fill_manual(values=c("white", "orange1", "#ca0020", "grey"), labels=c("wt", "CNV", "SNV", "NA" ), na.translate=FALSE) + 
  scale_y_discrete(limits=order_oncoplot) +
  scale_x_discrete(limits=rev(tmp$primary)) +
  xlab("Patients") +
  theme(panel.background = element_rect(fill= "darkgrey"), panel.grid = element_blank(), 
        axis.text.x = element_blank(), 
        #axis.title = element_blank(),
        axis.title.y = element_blank(),
        axis.ticks.x = element_blank(), 
        legend.position = "bottom", legend.key.size = unit(10, "pt")) +
  guides(fill=guide_legend(title = NULL ))

onco_right <-longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% 
  as_tibble() %>%
  mutate(rowname = change_chr_abber_brackets(rowname) ) %>%
  ggplot(aes(rowname, value)) + geom_col(aes(fill=assay)) +
  scale_x_discrete(limits=order_oncoplot) +
  coord_flip()+
  scale_fill_manual(values=c("orange1", "#ca0020")) +
  theme(panel.background = element_rect(fill= "white"), panel.grid = element_blank(), axis.title = element_blank(),
        axis.line.x = element_line(color="black")) 

onco_right_perc <- longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% as_tibble()  %>% 
  group_by(rowname) %>% 
  dplyr::summarise(perc=round(sum(value, na.rm = TRUE)/ sum(!is.na(value)) , 2) ) %>% 
  mutate(rowname = change_chr_abber_brackets(rowname) ) %>%
  ggplot(aes(rowname, 1, label=paste0(perc*100, "%") )) + 
  geom_text() + coord_flip() + theme_void() + 
  scale_x_discrete(limits=order_oncoplot)

onco_right_total <- 
  longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% as_tibble()  %>% 
  group_by(rowname) %>% 
  dplyr::summarise(total=sum(value, na.rm = TRUE )) %>% 
  mutate(rowname = change_chr_abber_brackets(rowname) ) %>%
  ggplot(aes(rowname, 1, label=total)) + 
  geom_text() + coord_flip() + theme_void() + 
  scale_x_discrete(limits=order_oncoplot)

onco_top <-longFormat(multiomics_MAE_prot[,,c("SNPs","chrom_abber")]) %>% 
  as_tibble() %>%
  mutate(rowname = change_chr_abber_brackets(rowname) ) %>%
  ggplot(aes(primary, value)) + geom_col(aes(fill=assay)) +
  scale_x_discrete(limits=rev(tmp$primary)) +
  scale_fill_manual(values=c("orange1", "#ca0020")) +
  theme(panel.background = element_rect(fill= "white"), panel.grid = element_blank(), axis.title = element_blank(),
        axis.line.x = element_line(color="black"))

p1 <- insert_yaxis_grob(onco_center,get_panel(onco_right_total) , grid::unit(.2, "null"), position = "right")
p1.2<- insert_yaxis_grob(p1, get_panel(onco_right), grid::unit(.1, "null"), position = "right")
p1.3<- insert_yaxis_grob(p1.2, get_panel(onco_right_perc), grid::unit(.2, "null"), position = "right")
oncoplot <- insert_xaxis_grob(p1.3, onco_top, grid::unit(.2, "null"), position = "top")
ggdraw(oncoplot)

Drug classes

drs_sel <- metadata(multiomics_MAE)$drugs_functional_groups %>% 
  filter( !( grepl("DMSO", Drug)   ) )  %>% 
  mutate(Pathways=if_else(Pathways=="Apoptosis", "Inducer/inhibitor of apoptosis", Pathways))
order_drugs <- drs_sel$Pathways %>% table() %>% as_tibble() %>% arrange(desc(n)) %>% .$.
drug_nrs <- drs_sel %>%
  ggplot(aes(Pathways)) + geom_bar() + 
  pp_sra_noguides_tilted +
  scale_x_discrete(limits=order_drugs)

drug_nrs

Save the workspace for further scripts and important plots

save(all_drugs,
     BCAA_genes, proteasome_genes, splice_genes, BCR_genes,
     drug_and_proteomics, drug_and_proteomics_drug,
     multiomics_MAE,
     pat_overlap_prot_RNA,
     prot_few_nas,
     proteomics_tbl_meta_biomart, 
     proteomics_tbl_meta_biomart_chrab, 
     proteomics_tbl_meta_biomart_health, 
     proteomics_tbl_meta_biomart_SNP,
      file="data/CLL_Proteomics_Setup.RData")

save(oncoplot,  
file = "RData_plots/CLL_Proteomics_Setup_Plots.RData")

Session Info

sessionInfo()
## R version 4.1.3 (2022-03-10)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur/Monterey 10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] grid      stats4    stats     graphics  grDevices utils     datasets 
## [8] methods   base     
## 
## other attached packages:
##  [1] cowplot_1.1.1               gplots_3.1.3               
##  [3] MultiAssayExperiment_1.20.0 biomaRt_2.50.3             
##  [5] biomartr_1.0.2              apeglm_1.16.0              
##  [7] limma_3.50.3                forcats_0.5.1              
##  [9] stringr_1.4.0               dplyr_1.0.9                
## [11] purrr_0.3.4                 readr_2.1.2                
## [13] tidyr_1.2.0                 tibble_3.1.7               
## [15] tidyverse_1.3.1             DESeq2_1.34.0              
## [17] SummarizedExperiment_1.24.0 Biobase_2.54.0             
## [19] MatrixGenerics_1.6.0        matrixStats_0.62.0         
## [21] GenomicRanges_1.46.1        GenomeInfoDb_1.30.1        
## [23] IRanges_2.28.0              S4Vectors_0.32.4           
## [25] BiocGenerics_0.40.0         readxl_1.4.0               
## [27] ggpubr_0.4.0                Hmisc_4.7-0                
## [29] ggplot2_3.3.6               Formula_1.2-4              
## [31] survival_3.3-1              lattice_0.20-45            
## [33] Matrix_1.4-1                pheatmap_1.0.12            
## [35] gtools_3.9.3                plyr_1.8.7                 
## 
## loaded via a namespace (and not attached):
##   [1] backports_1.4.1        BiocFileCache_2.2.1    splines_4.1.3         
##   [4] BiocParallel_1.28.3    digest_0.6.29          htmltools_0.5.2       
##   [7] fansi_1.0.3            magrittr_2.0.3         checkmate_2.1.0       
##  [10] memoise_2.0.1          cluster_2.1.3          tzdb_0.3.0            
##  [13] Biostrings_2.62.0      annotate_1.72.0        modelr_0.1.8          
##  [16] bdsmatrix_1.3-6        prettyunits_1.1.1      jpeg_0.1-9            
##  [19] colorspace_2.0-3       rappdirs_0.3.3         blob_1.2.3            
##  [22] rvest_1.0.2            haven_2.5.0            xfun_0.31             
##  [25] crayon_1.5.1           RCurl_1.98-1.7         jsonlite_1.8.0        
##  [28] genefilter_1.76.0      glue_1.6.2             gtable_0.3.0          
##  [31] zlibbioc_1.40.0        XVector_0.34.0         DelayedArray_0.20.0   
##  [34] car_3.1-0              abind_1.4-5            scales_1.2.0          
##  [37] mvtnorm_1.1-3          DBI_1.1.3              rstatix_0.7.0         
##  [40] Rcpp_1.0.9             progress_1.2.2         xtable_1.8-4          
##  [43] emdbook_1.3.12         htmlTable_2.4.1        foreign_0.8-82        
##  [46] bit_4.0.4              htmlwidgets_1.5.4      httr_1.4.3            
##  [49] RColorBrewer_1.1-3     ellipsis_0.3.2         farver_2.1.1          
##  [52] pkgconfig_2.0.3        XML_3.99-0.10          nnet_7.3-17           
##  [55] sass_0.4.1             dbplyr_2.2.1           deldir_1.0-6          
##  [58] locfit_1.5-9.6         utf8_1.2.2             labeling_0.4.2        
##  [61] tidyselect_1.1.2       rlang_1.0.4            AnnotationDbi_1.56.2  
##  [64] munsell_0.5.0          cellranger_1.1.0       tools_4.1.3           
##  [67] cachem_1.0.6           cli_3.3.0              generics_0.1.3        
##  [70] RSQLite_2.2.14         broom_1.0.0            evaluate_0.15         
##  [73] fastmap_1.1.0          yaml_2.3.5             knitr_1.39            
##  [76] bit64_4.0.5            fs_1.5.2               caTools_1.18.2        
##  [79] KEGGREST_1.34.0        xml2_1.3.3             compiler_4.1.3        
##  [82] rstudioapi_0.13        filelock_1.0.2         curl_4.3.2            
##  [85] png_0.1-7              ggsignif_0.6.3         reprex_2.0.1          
##  [88] geneplotter_1.72.0     bslib_0.3.1            stringi_1.7.8         
##  [91] highr_0.9              vctrs_0.4.1            pillar_1.7.0          
##  [94] lifecycle_1.0.1        jquerylib_0.1.4        data.table_1.14.2     
##  [97] bitops_1.0-7           R6_2.5.1               latticeExtra_0.6-30   
## [100] KernSmooth_2.23-20     gridExtra_2.3          MASS_7.3-57           
## [103] assertthat_0.2.1       withr_2.5.0            GenomeInfoDbData_1.2.7
## [106] parallel_4.1.3         hms_1.1.1              rpart_4.1.16          
## [109] coda_0.19-4            rmarkdown_2.14         carData_3.0-5         
## [112] bbmle_1.0.25           numDeriv_2016.8-1.1    lubridate_1.8.0       
## [115] base64enc_0.1-3        interp_1.1-3